/**
 @文件名： numericalUnits
 @来源：YongPing.Wang|2023/11/18 00:12
 @描述：数值相关操作的文件
 **/
import numeral from 'numeral'
// 默认显示
const defaultShow: string = '--'

// 非0 空 非数值
export const isNotZeroNull = (value: any): boolean => {
  return !(!value && value != 0)
}
// 格式化 后 判断是否为数字
export const isNumberFormat = (value: any): boolean => {
  return !isNaN(numeral(value))
}
// 返回数值类型格式化参数
const fractionFormat = (fractionDigits?: number | string | undefined): string => {
  switch (fractionDigits) {
    case 0:
      return '0'
    case 1:
      return '0.0'
    case 2:
      return '0.00'
    case 3:
      return '0.000'
    case 'q0':
      return '0,0'
    case 'q1':
      return '0,0.0'
    case 'q2':
      return '0,0.00'
    case 'q3':
      return '0,0.000'
    default:
      return '0'
  }
}

/**
@方法名：keepDecimalInt
@来源：Winford.Wang|2023-11-22，12:20
@参数：value: 数值 ,fractionDigits：小数位
@返回：
@描述：保留小数位/整数 四舍五入
**/
export const keepDecimalInt = (value: any, fractionDigits?: number): number | string => {
  if (isNotZeroNull(value)) {
    if (!isNumberFormat(value)) {
      return numeral(value).format(fractionFormat(fractionDigits || 2))
    }
  }
  return defaultShow
}
/**
 @方法名：keepDecimalMicrometer
 @来源：Winford.Wang|2023-11-22，12:20
 @参数：value: 数值 ,fractionDigits：小数位
 @返回：
 @描述：千分位 保留小数位/整数 四舍五入
 **/
export const keepDecimalIntMicrometer = (value: any, fractionDigits?: number): number | string => {
  if (isNotZeroNull(value)) {
    if (!isNumberFormat(value)) {
      return numeral(value).format(fractionFormat(`q${fractionDigits}` || 'q2'))
    }
  }
  return defaultShow
}

/**
 @方法名：keepAdd
 @来源：Winford.Wang|2023-11-22，12:20
 @参数：value: 数值 ,value2：数值
 @返回：
 @描述：加法
 **/
export const keepAdd = (value: number, value2: number): number => {
  if (isNotZeroNull(value) && isNotZeroNull(value2)) {
    return numeral(value).add(value2)._value
  }
  return 0
}
/**
 @方法名：keepSubtract
 @来源：Winford.Wang|2023-11-22，12:20
 @参数：value: 数值 ,value2：数值
 @返回：
 @描述：减法
 **/
export const keepSubtract = (value: number, value2: number): number => {
  if (isNotZeroNull(value) && isNotZeroNull(value2)) {
    return numeral(value).subtract(value2)._value
  }
  return 0
}
/**
 @方法名：keepMultiply
 @来源：Winford.Wang|2023-11-22，12:20
 @参数：value: 数值 ,value2：数值
 @返回：
 @描述：乘法
 **/
export const keepMultiply = (value: number, value2: number): number => {
  if (isNotZeroNull(value) && isNotZeroNull(value2)) {
    return numeral(value).multiply(value2)._value
  }
  return 0
}
/**
 @方法名：keepDivide
 @来源：Winford.Wang|2023-11-22，12:20
 @参数：value: 数值 ,value2：数值
 @返回：
 @描述：除法
 **/
export const keepDivide = (value: number, value2: number): number => {
  if (isNotZeroNull(value) && isNotZeroNull(value2)) {
    const num = numeral(value).divide(value2)._value
    if (num === Infinity) {
      return 0
    }
    return num
  }
  return 0
}
